perm filename 11LST.FAI[KL,SYS] blob sn#260123 filedate 1977-01-31 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE 11LST
C00004 00003	OPDEF PEEK11 [002000,,]
C00008 00004	READ FILE SPECS FROM TTY INTO BLOCK
C00013 00005	SAVPPN:	0		HAS CURRENT DSK PPN
C00015 ENDMK
C⊗;
TITLE 11LST

F←0
A←1
B←2
C←3
D←4
E←5
G←6
T←7
TT←10
I←11
J←12
K←13
L←14
M←15
N←16
P←17

DKIC←←1
DKOC←←2
ELFC←←3

DEFINE CRLF
<	OUTCHR [15]
	OUTCHR [12]
>

DEFINE GETFIL $ (LE,STR,LH,CH)
<ZZ←←.
IFDIF <STR><><OUTSTR [ASCIZ /$STR$/]>
	PUSHJ P,FILSCN	;INPUT FILE SPECS
IFIDN <LE> <L> <LH,,LUP>
IFIDN <LE> <E> <LH,,ENT>
	JRST [	CRLF		;ALT TYPED
		JRST MAIN]
	JRST [	OUTSTR [ASCIZ /??
/]					;GARBAGE TYPED
		CLRBFI
		JRST ZZ]
	INIT CH,0
	'DSK   '
	IBUF
	JRST INITL
IFIDN <LE> <L> <LOOKUP CH,LUP
	JRST [	PUSHJ P,LUPFL
		JRST ZZ]>
IFIDN <LE> <E> <ENTER CH,ENT
	JRST [	PUSHJ P,ENTFL
		JRST ZZ]>
>
OPDEF PEEK11 [002000,,]
OPDEF POKE11 [003000,,]
GRAB==10
SGNX==4
INTELF==100000
INTCLK==200			;LEFT HALF
NXTPNT==1000			;PDP11 ADDRESS OF NXTPNT

GO:	RESET
	MOVE P,[-20,,PDL-1]
	INIT ELFC,17
	SIXBIT /ELF/
	0
	JRST 4,.
	MOVEI A,INT
	MOVEM A,JOBAPR↑
	MOVEI A,INTELF
	INTENB A,
MAIN:	GETFIL (L,TYPE FILE TO PRINT - ,0,DKIC)
	SETZM AHEAD
	SETZM DONEF
LOOK:	PUSHJ P,LOOKR
	MOVE B,[441000,,BUF11]
	SETZM BUF11
	MOVE D,[BUF11,,BUF11+1]
	BLT D,BUF11+BUF11L-1
	SETZM PHAS
	SETZM HPOS
DONXTL:	PUSHJ P,GET
	JRST DONE0
	CAIN E,26
	JRST DONXTL
	CAIN E,11
	JRST TAB
	CAIN E,12
	JRST LF
	PUSHJ P,PUT
	JRST DONXTL

FF:	PUSHJ P,PUT
DONXT1:	MOVE D,[400003,,400000]	;SET ELF MODE AND ADDRESS
	MOVE B,NXTP
	LSH B,-1		;MAKE BUFFER POINTER A WORD ADDRESS
	IOR D,B
	USETO ELFC,D
	OUTPUT ELFC,[-BUF11L,,BUF11-1]
	MTAPE ELFC,WTNXTP
	JRST 4,.
	SKIPN DONEF
	JRST LOOK
	JRST DONE

DONE0:	SETOM DONEF
LFOUT:	MOVEI E,12
	JRST FF

TAB:	LDB A,[POINT 3,HPOS,35]
	MOVN A,A
	ADDI A,8
	MOVEI E,40
	PUSHJ P,PUT
	SOJG A,.-1
	JRST DONXTL

LF:	PUSHJ P,GET
	JRST DONE0
	CAIN E,14
	JRST FF1
	MOVEM E,AHEAD
	JRST LFOUT

FF1:	PUSHJ P,PUT
	MOVEI E,12
	PUSHJ P,PUT
	PUSHJ P,PUT
	JRST FF

DONE:	MOVE A,[BUF11,,BUF11+1]
	SETZM BUF11
	BLT A,BUF11+BUF11L-1
	MOVE A,[BYTE (8) 14,14,0,14]
	MOVEM A,BUF11
	PUSHJ P,LOOKR
	CLKINT 0
	MOVE D,[400003,,400000]	;SET ELF MODE AND ADDRESS
	MOVE B,NXTP
	LSH B,-1		;MAKE BUFFER POINTER A WORD ADDRESS
	IOR D,B
	USETO ELFC,D
	OUTPUT ELFC,[-BUF11L,,BUF11-1]
	MTAPE ELFC,WTNXTP
	JRST 4,.
	PUSHJ P,LOOKR
	OUTSTR [ASCIZ /
ALL DONE
/]
	EXIT

LOOKR:	MTAPE ELFC,RDNXTP	;READ NXTPNT
	JRST 4,.
	MOVE B,NXTP
	AOJN B,CPOPJ
	CLKINT =15*60		;WAKE UP IN 15 SECONDS
	IWAIT
	JRST LOOKR

RDNXTP:	PEEK11 NXTPNT/2(SGNX)
NXTP:	0

WTNXTP:	POKE11 NXTPNT/2
	-1

INT:	DISMIS

GET:	SKIPE E,AHEAD
	JRST [SETZM AHEAD ↔ JRST POPJ1]
	SOSG IBUF+2
	IN DKIC,
	CAIA
	POPJ P,
	ILDB E,IBUF+1
	JUMPE E,GET
	AOS (P)
	POPJ P,

PUT:	AOS HPOS
	SKIPE PHAS
	JRST PUT1
	SETOM PHAS
	PUSH P,B		;SAVE BYTE POINTER
	IBP B
	IDPB E,B
	POP P,B
	POPJ P,

PUT1:	SETZM PHAS
	IDPB E,B
	IBP B
	POPJ P,

PATCH:	BLOCK 100
;READ FILE SPECS FROM TTY INTO BLOCK
;WORD AFTER CALL IS DEFAULT EXTENSION,,BLK ADDRESS.
;DOESNT SKIP IF ALT MODE TYPED.
;SKIPS ONCE IF SYNTAX ERROR, TWICE IF OK.
FILSCN:	MOVE L,@(P)
	HLLZM L,1(L)	;SET UP DEFAULT EXTENSION
	AOS (P)
	MOVE I,SAVPPN
	MOVEM I,3(L)	;INITIALIZE TO CURRENT DSK PPN
	PUSHJ P,GETSIX	;SYMBOL IN J, SEPARATOR IN I
	CAIN I,175	;ALT MODE
	POPJ P,
	AOS (P)
	MOVEM J,(L)
	CAIN I,"."
	JRST FILSCX	;GET EXTENSION
	CAIN I,"["
	JRST FILSCP	;GET PPN
	CAIN I,12
POPJ1:	AOS (P)
CPOPJ:	POPJ P,

FILSCX:	PUSHJ P,GETSIX
	HLLZM J,1(L)
	CAIN I,12
	JRST POPJ1
	CAIE I,"["
	POPJ P,
FILSCP:	PUSHJ P,GETSIX
	JUMPE J,FILSP3
FILSP1:	TLNE J,77	;RIGHT ADJUST
	JRST FILSP2
	LSH J,-6
	JRST FILSP1

FILSP2:	HLLM J,3(L)	;STORE PROJ NUMBER
FILSP3:	CAIN I,","
	JRST FILSP4	;GET PROGRAMMER NAME
FILSP8:	CAIN I,"]"
	JRST FILSP5	;DONE
	CAIN I,12
	AOS (P)
	POPJ P,

FILSP4:	PUSHJ P,GETSIX
	JUMPE J,FILSP8
FILSP6:	TLNE J,77
	JRST FILSP7
	LSH J,-6
	JRST FILSP6

FILSP7:	HLRM J,3(L)
	JRST FILSP8

FILSP5:	PUSHJ P,GETSIX
	CAIN I,12
	JRST POPJ1
	JRST FILSP5

LUPFL:	OUTSTR [ASCIZ /LOOKUP FAILED - /]
	MOVEI L,LUP
FILNOU:	MOVE I,(L)
	PUSHJ P,SIXTYP
	OUTCHR ["."]
	MOVE I,1(L)
	PUSHJ P,SIXTY3
	OUTCHR ["["]
	MOVE I,3(L)
	PUSHJ P,SIXTY3
	OUTCHR [","]
	MOVS I,3(L)
	PUSHJ P,SIXTY3
	OUTSTR [ASCIZ /]
/]
	POPJ P,

ENTFL:	OUTSTR [ASCIZ /ENTER FAILED - /]
	MOVEI L,ENT
	JRST FILNOU

;GET SIXBIT SYLLABLE IN J WITH SEPARATOR IN I
GETSIX:	MOVE K,[440600,,J]
	SETZB F,J
GETSX1:	INCHWL I
	CAIN I,15
	JRST GETSX1
	CAIL I,"0"
	CAILE I,"9"
	JRST GETSX2	;NOT NUM
	JRST GETSX3	;NUMBER
GETSX2:	CAIL I,"a"
	CAILE I,"z"
	JRST GETSX4	;NOT LOWER CASE
	JRST GETSX5	;LOWER CASE
GETSX4:	CAIL I,"A"
	CAILE I,"Z"
	JRST GETSX6
GETSX3:	SUBI I,40
GETSX5:	TLNE K,770000
	IDPB I,K
	JRST GETSX1

GETSX6:	CAIN I,"↓"
	JRST GETSX7
	TRNN F,1
	POPJ P,
	JRST GETSX5

GETSX7:	XORI F,1
	JRST GETSX1

;TYPE I IN SIXBIT (6 CHARS WORTH)
SIXTYP:	MOVE J,[440600,,I]
SIXTY1:	ILDB K,J
	ADDI K,40
	OUTCHR K
	TLNE J,770000
	JRST SIXTY1
	POPJ P,

;TYPE LEFT 3 CHARS OF I
SIXTY3:	MOVE J,[440600,,I]
SIXTY4:	ILDB K,J
	ADDI K,40
	OUTCHR K
	TLNE J,500000
	JRST SIXTY4
	POPJ P,

INITL:	OUTSTR [ASCIZ /CAN'T INIT DSK - LOSEY, LOSEY
/]
	JRST 4,.

GETNUM:	SETZM MINUSF
	MOVEI A,0
GETNM1:	INCHWL B
	CAIN B,"-"
	JRST [SETOM MINUSF ↔ JRST GETNM1]
	CAIN B,15
	JRST GETNM1
	CAIN B,12
	JRST GETNMX
	CAIN B,175
	JRST POPJ1
	CAIL B,"0"
	CAILE B,"7"
	POPJ P,
	LSH A,3
	ADDI A,-"0"(B)
	AOJA C,GETNM1

GETNMX:	SKIPGE MINUSF
	MOVNS A
POPJ2:	AOS (P)
	JRST POPJ1

OCTTYP:	PUSH P,G
	MOVEI G,10
	JRST DECTY

DECTYP:	PUSH P,G
	MOVEI G,=10
DECTY:	PUSH P,D
	PUSH P,E
	PUSHJ P,DECTY1
	POP P,E
	POP P,D
	POP P,G
	POPJ P,

DECTY1:	IDIVI D,(G)
	HRLM E,(P)
	SKIPE D
	PUSHJ P,DECTY1
	HLRZ E,(P)
	ADDI E,"0"
	OUTCHR E
	POPJ P,
SAVPPN:	0		;HAS CURRENT DSK PPN
LUP:	BLOCK 4
ENT:	BLOCK 4
IBUF:	BLOCK 3
MINUSF:	0

PDL:	BLOCK 20

AHEAD:	0
PHAS:	0
DONEF:	0
HPOS:	0
BUF11L===132/4
BUF11:	BLOCK BUF11L

	END GO